\indent La funcionalidad de este filtro consiste en a partir de una imagen y de un tamaño dado, extraer una subimagen de la original tomando las 4 esquinas y combin\'andolas de la forma indicada en el enunciado.
 \indent Las dimensiones corresponden a un cuadrado determinado por la variable ingresada por par\'ametro en la variable $tam$ de la funci\'on.

\indent La idea del algoritmo consiste en cortar los bloques de las esquinas superiores en simult\'aneo copiando de a 16 bytes, hasta cubrir el cuadrado de largo y ancho determinado por $tam$, en la parte inferior de la imagen de destino, luego recortar los bloques de las esquinas inferiores y copiarlos en la parte superior de la imagen destino.

\indent El resultado obtenido es el que marca la figura:

\begin{center}
\includegraphics[scale= 0.5]{imagenes/recortar.jpg}\\
\end{center}

\subsubsection{Carga de datos}

\indent En la implementaci\'on propuesta procesaremos los datos de a 16 bytes. Lo primero es posicionarse en el pixel (0,0) para copiar el bloque A, y en el pixel $rowsize$ - $tam$ donde comienza el bloque B. 

\indent El trabajo de procesar los bytes para componer la nueva imagen lo hacemos en una funci\'on auxiliar $moverHemisferio$ que se encarga de tomar los bytes en src y copiarlos en la ubicaci\'on que le corresponde en dst. Para esto efectuamos el siguiente procedimiento:


\begin{itemize}
\item Inicializamos $R12$ en 0 como contador para recorrer las columnas
\item Inicializamos $R13$ en 0 como contador para saber cuantas filas fueron copiadas
\item Copiamos a $R14$ el puntero al inicio de la imagen fuente, que se encuentra en $RDI$
\item A $R14$ le sumamos el ancho de la imagen fuente, que se encuentra en $R9$
\item A $R14$ le restamos $tam$, el tamaño de la imagen a copiar, que se encuentra en $RDX$
\item Copiamos en $R15$ el puntero al inicio de la imagen destino, que se encuentra en $RSI$
\item A $R15$ le sumamos $tam$, el tamaño de la imagen a copiar, que se encuentra en $RDX$
\end{itemize}

\indent El registro $R12$ se va a utilizar para saber cu\'ando se copiaron $tam$ columnas.

\indent El registro $R13$ se va a utilizar para saber cu\'ando se copiaron $tam$ filas.

\indent En $RSI$ se mantiene el puntero a la imagen destino.


\subsubsection{Ciclo Principal}

\indent Con los datos cargados en los registros vamos a mostrar una iteraci\'on del ciclo principal del filtro. Para cada l\'inea de la matriz que representa la imagen fuente se realizan las siguientes acciones.

\begin{itemize}
\item Se levanta desde $RDI$ + $R12$ 16 bytes al registro $XMM0$, mediante la instrucci\'on movdqu. El registro queda
  	\begin{center}
   		 \xmmxByteHigh{$P_8$}{$P_9$}{$P_{10}$}{$P_{11}$}{$P_{12}$}{$P_{13}$}{$P_{14}$}{$P_{15}$}\xmmxByteLow{$P_0$}{$P_1$}{$P_2$}{$P_3$}{$P_4$}{$P_5$}{$P_6$}{$P_7$}
  	\end{center}
\item Se levanta desde $R14$ + $R12$ 16 bytes al registro $XMM1$ , mediante la instrucci\'on movdqu. El registro queda
  	\begin{center}
   		 \xmmxByteHigh{$P_8$}{$P_9$}{$P_{10}$}{$P_{11}$}{$P_{12}$}{$P_{13}$}{$P_{14}$}{$P_{15}$}\xmmxByteLow{$P_0$}{$P_1$}{$P_2$}{$P_3$}{$P_4$}{$P_5$}{$P_6$}{$P_7$}
  	\end{center}
\item Se copia al destino,$RSI$, los datos cargados en $XMM0$ y $XMM1$.
\item Se incrementan en 16 los punteros  $RDI$ y $RSI$
\item Se incrementan en 16 el puntero  $R12$ 
\item Cuando el valor del puntero $R12$ llega a tam, quiere decir que copi\'o toda la fila. Entonces se avanza a la siguiente fila y se repite el proceso.

\item En los casos que resulte que la imagen no es m\'ultiplo de 16 y queden bytes sueltos, se procesar\'an retroceciendo los punteros hasta completar los 16 bytes, volviendo a procesar los que hagan falta.
\end{itemize}
